namespace Microsoft.Extensions.Caching.Memory;

public static class MemoryCacheExtensions
{
    /// <summary>
    /// 如果 <paramref name="key"/> 引用的值存在且为 <typeparamref name="T"/> 类型，则返回该值。
    /// 否则返回一个新实例而不将其保存到缓存中。从不返回 <see langword="null"/>。
    /// </summary>
    public static T GetOrNew<T>(this IMemoryCache memoryCache, string key)
        where T : new() =>
        memoryCache.TryGetValue(key, out var valueObject) &&
        valueObject is T valueOfType
            ? valueOfType
            : new T();
}
